/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.cobranza.dto;

import com.brain.core.dto.ParametroDto;
import com.brain.segu.dto.UsuarioDto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author Hvives
 */
@Entity
@Table(name = "TCOB_DEUDA_CLIENTE")
public class DeudaClienteDto implements Serializable {

    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_TCOB_DEUDA_CLIENTE")
    @TableGenerator(name = "SEQ_TCOB_DEUDA_CLIENTE", table = "TCORE_ENTIDAD", pkColumnName = "NOMBRE", valueColumnName = "CORRELATIVO", pkColumnValue = "TCOB_DEUDA_CLIENTE", allocationSize = 1)
    private Long id;
    
    @JoinColumn(name = "EMPRESA_CLIENTE", referencedColumnName = "ID")
    @ManyToOne
    private EmpresaClienteDto empresaClienteDto;
    
    @Size(max = 100)
    @Column(name = "DESCRIPCION")
    private String descripcion;   
    
    @Column(name = "FECHA_VENCIMIENTO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaVencimiento;
    
    @Size(max = 20)
    @Column(name = "MONEDA")
    private String moneda;
    
    @Column(name = "MONTO_MINIMO")
    private BigDecimal montoMinimo;
    
    @Column(name = "MONTO_TOTAL")
    private BigDecimal montoTotal;
    
    @JoinColumn(name = "PRODUCTO", referencedColumnName = "ID")
    @ManyToOne
    private ProductoEmpresaDto productoEmpresaDto;
    
    @JoinColumn(name = "ESTADO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto estado;
    
    @Column(name = "CUOTAS_VENCIDAS")
    private Long cuotasVencidas;
    
    @Column(name = "TOTAL_CUOTAS")
    private Long totalCuotas;
    
    @Column(name = "MONTO_CUOTA")
    private BigDecimal montoCuota;
    
    @Column(name = "CAPITAL_DEUDA")
    private BigDecimal capitalDeuda;
    
    @Column(name = "INTERESES")
    private BigDecimal intereses;
    
    @Column(name = "DESCUENTO")
    private BigDecimal descuento;
    
    @Column(name = "DIAS_MORA")
    private Long diasMora;
    
    @JoinColumn(name = "GESTOR", referencedColumnName = "ID")
    @ManyToOne
    private UsuarioDto gestorDto;
    
    @JoinColumn(name = "CARGA_REF", referencedColumnName = "ID")
    @ManyToOne
    private CargaDto cargaRefDto;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "deudaClienteDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<PagoDto> listaPagos;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "deudaClienteDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ComunicacionDto> listaAcciones;
    
    @Transient
    private String estadoTexto;
    
    @Transient
    private Long cuotasPorVencer;
    
    public DeudaClienteDto() {
    }

    public DeudaClienteDto(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public EmpresaClienteDto getEmpresaClienteDto() {
        return empresaClienteDto;
    }

    public void setEmpresaClienteDto(EmpresaClienteDto empresaClienteDto) {
        this.empresaClienteDto = empresaClienteDto;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Date getFechaVencimiento() {
        return fechaVencimiento;
    }

    public void setFechaVencimiento(Date fechaVencimiento) {
        this.fechaVencimiento = fechaVencimiento;
    }

    public String getMoneda() {
        return moneda;
    }

    public void setMoneda(String moneda) {
        this.moneda = moneda;
    }

    public BigDecimal getMontoMinimo() {
        return montoMinimo;
    }

    public void setMontoMinimo(BigDecimal montoMinimo) {
        this.montoMinimo = montoMinimo;
    }

    public BigDecimal getMontoTotal() {
        return montoTotal;
    }

    public void setMontoTotal(BigDecimal montoTotal) {
        this.montoTotal = montoTotal;
    }

    public ProductoEmpresaDto getProductoEmpresaDto() {
        return productoEmpresaDto;
    }

    public void setProductoEmpresaDto(ProductoEmpresaDto productoEmpresaDto) {
        this.productoEmpresaDto = productoEmpresaDto;
    }

    public ParametroDto getEstado() {
        return estado;
    }

    public void setEstado(ParametroDto estado) {
        this.estado = estado;
    }

    public Long getCuotasVencidas() {
        return cuotasVencidas;
    }

    public void setCuotasVencidas(Long cuotasVencidas) {
        this.cuotasVencidas = cuotasVencidas;
    }

    public Long getTotalCuotas() {
        return totalCuotas;
    }

    public void setTotalCuotas(Long totalCuotas) {
        this.totalCuotas = totalCuotas;
    }

    public BigDecimal getMontoCuota() {
        return montoCuota;
    }

    public void setMontoCuota(BigDecimal montoCuota) {
        this.montoCuota = montoCuota;
    }

    public BigDecimal getCapitalDeuda() {
        return capitalDeuda;
    }

    public void setCapitalDeuda(BigDecimal capitalDeuda) {
        this.capitalDeuda = capitalDeuda;
    }

    public BigDecimal getIntereses() {
        return intereses;
    }

    public void setIntereses(BigDecimal intereses) {
        this.intereses = intereses;
    }

    public BigDecimal getDescuento() {
        return descuento;
    }

    public void setDescuento(BigDecimal descuento) {
        this.descuento = descuento;
    }

    public String getEstadoTexto() {
        this.estadoTexto = this.estado.getDescripcion();
        return this.estadoTexto;
    }

    public void setEstadoTexto(String estadoTexto) {
        this.estadoTexto = estadoTexto;
    }

    public Long getCuotasPorVencer() {
        return this.totalCuotas - this.cuotasVencidas;
    }

    public void setCuotasPorVencer(Long cuotasPorVencer) {
        this.cuotasPorVencer = cuotasPorVencer;
    }

    public List<PagoDto> getListaPagos() {
        return listaPagos;
    }

    public void setListaPagos(List<PagoDto> listaPagos) {
        this.listaPagos = listaPagos;
    }

    public List<ComunicacionDto> getListaAcciones() {
        return listaAcciones;
    }

    public void setListaAcciones(List<ComunicacionDto> listaAcciones) {
        this.listaAcciones = listaAcciones;
    }

    public Long getDiasMora() {
        return diasMora;
    }

    public void setDiasMora(Long diasMora) {
        this.diasMora = diasMora;
    }

    public UsuarioDto getGestorDto() {
        return gestorDto;
    }

    public void setGestorDto(UsuarioDto gestorDto) {
        this.gestorDto = gestorDto;
    }

    public CargaDto getCargaRefDto() {
        return cargaRefDto;
    }

    public void setCargaRefDto(CargaDto cargaRefDto) {
        this.cargaRefDto = cargaRefDto;
    }
    
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof DeudaClienteDto)) {
            return false;
        }
        DeudaClienteDto other = (DeudaClienteDto) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.brain.cobranza.dto.DeudaClienteDto[ id=" + id + " ]";
    }
}
